<?php

declare(strict_types=1);

namespace app\taglib;

use think\template\TagLib;

/**
 * 标签扩展
 */
class Tp extends TagLib
{
    /**
     * 标签定义
     *  attr 属性列表 close 是否闭合（0 或者1 默认1） alias 标签别名 level 嵌套层次
     * @var array
     */
    protected $tags = array(
        'close'    => ['attr' => 'time,format', 'close' => 0],                          // 闭合标签，默认为不闭合
        'open'     => ['attr' => 'name,type', 'close' => 1],
        'nav'      => ['attr' => 'id,limit,name', 'close' => 1],                        // 通用导航信息
        // 'cate'     => ['attr' => 'id,type,anchor', 'close' => 0],                    // 通用栏目信息
        // 'position' => ['attr' => 'name', 'close' => 1],                              // 通用位置信息
        // 'link'     => ['attr' => 'name', 'close' => 1],                              // 获取友情链接
        // 'ad'       => ['attr' => 'name,id', 'close' => 1],                           // 获取广告信息
        'listbycid'     => ['attr' => 'cid,name,limit', 'close' => 1],                  // 通用列表
        'listtime'  => ['attr' => 'name,limit', 'close' => 1],                          // 时间归档
        'carousellist'  => ['attr' => 'name,limit,key', 'close' => 1],                          // 时间归档
    );

    // 这是一个闭合标签的简单演示
    public function tagClose($tag)
    {
        $format = empty($tag['format']) ? 'Y-m-d H:i:s' : $tag['format'];
        $time   = empty($tag['time']) ? time() : $tag['time'];
        $parse  = '<?php ';
        $parse  .= 'echo date("' . $format . '",' . $time . ');';
        $parse  .= ' ?>';
        return $parse;
    }

    // 这是一个非闭合标签的简单演示
    public function tagOpen($tag, $content)
    {
        $type  = empty($tag['type']) ? 0 : 1; // 这个type目的是为了区分类型，一般来源是数据库
        $name  = $tag['name'];                // name是必填项，这里不做判断了
        $parse = '<?php ';
        $parse .= '$test_arr=[[1,3,5,7,9],[2,4,6,8,10]];'; // 这里是模拟数据
        $parse .= '$__LIST__ = $test_arr[' . $type . '];';
        $parse .= ' ?>';
        $parse .= '{volist name="__LIST__" id="' . $name . '"}';
        $parse .= $content;
        $parse .= '{/volist}';
        return $parse;
    }

    // 文章列表(栏目查询)
    public function tagListbycid($tag, $content)
    {
        $cid    = (int) $tag['cid'];                        // 不可以为空
        $name   = (string) $tag['name'];                     // 不可为空
        $order  =  isset($tag['order']) ? (string) $tag['order'] : 'sort ASC,id DESC';  // 可为空
        $limit  = $tag['limit'] ? (int) $tag['limit'] :  10; // 多少条数据

        $parse = '<?php ';
        $parse .= '$list = \app\model\Article::getListByCid(' . $cid . ', ' . $limit . ', "' . $order . '");';
        $parse .= '?>';
        $parse .= '{volist name="list" id="' . $name . '"}';
        $parse .= $content;
        $parse .= '{/volist}';

        return $parse;
    }

    // 归档列表(月份排序)
    public function tagListtime($tag, $content)
    {
        $name   = (string) $tag['name'];                        // 不可为空
        $limit  = $tag['limit'] ? (int) $tag['limit'] : 0;     // 多少条数据 0 不限制

        $parse  = '<?php ';
        $parse .= '$list = \app\model\Article::createTimeArchive(' . $limit . ');';
        $parse .= '?>';
        $parse .= '{volist name="list" id="' . $name . '"}';
        $parse .= $content;
        $parse .= '{/volist}';

        return $parse;
    }

    // 归档列表(月份排序)
    public function tagCarousellist($tag, $content)
    {
        $name   = (string) $tag['name'];                        // 不可为空
        $key    = $tag['key'] ? (string) $tag['key'] : 'key';   // 默认为key
        $limit  = $tag['limit'] ? (int) $tag['limit'] : 5;     // 多少条数据 0 不限制

        $parse  = '<?php ';
        $parse .= '$list = \app\model\Carousel::getCarousel('.$limit.');';
        $parse .= '?>';
        $parse .= '{volist name="list" id="' . $name . '" key="'.$key.'"}';
        $parse .= $content;
        $parse .= '{/volist}';

        return $parse;
    }
}
